from dataclasses import dataclass
from typing import Optional

from app.models.metadata import Subject


@dataclass
class SubjectGrade:
    # 学科
    subject: Subject
    # 子测验名称，如数学A、数学B
    sub_exam_title: Optional[str] = None
    # 学科得分
    subject_score: Optional[float] = None
    # 学科等级
    subject_grade: Optional[str] = None
    # 学科成绩的班级排名
    subject_class_rank: Optional[int] = None
    # 学科成绩的年级排名
    subject_grade_rank: Optional[int] = None


@dataclass
class ExamGrade:
    # 考试名称
    exam_title: str
    # 考试总成绩：所有学科成绩之和
    exam_score: Optional[float] = None
    # 总成绩班级排名
    exam_class_rank: Optional[int] = None
    # 总成绩年级排名
    exam_grade_rank: Optional[int] = None
    # 学科成绩列表
    subject_grades: list[SubjectGrade] = None


@dataclass
class Student:
    # 学号
    student_code: str
    # 学生姓名
    student_name: str
    # 班级
    class_name: str
    # 学生考试成绩
    exam_grades: list[ExamGrade]


@dataclass
class BaseStudent:
    # 学号
    student_code: str
    # 学生姓名
    student_name: str
    # 班级
    class_name: str